#include "KEY.h"
#include "stdlib.h"
#include "stdint.h"
#include "memory.h"


KEY KEY_TEXT,KEY_2;




void KeyLogic(void)
{
    static uint8_t  Key_Flag = 0;
    static int Key_Time = 0;
    KEY_TEXT.Key_State_Last = KEY_TEXT.Key_State_Now;  
    KEY_TEXT.Key_State_Now = HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin);


    if(Key_Time>0)
    {
       Key_Time--;
    }

   /*——————按键的基础功能——————*/
    if(KEY_TEXT.Key_State_Now == 0)
    {
       KEY_TEXT.Key_Press.Hold = 1;
    }
    else
    {
       KEY_TEXT.Key_Press.Hold = 0;
       KEY_TEXT.Key_Press.Down = 0;
       KEY_TEXT.Key_Press.Up = 0;
    }
    if(KEY_TEXT.Key_State_Last == 1 && KEY_TEXT.Key_State_Now == 0)
    {
       KEY_TEXT.Key_Press.Down = 1;
    }
    if(KEY_TEXT.Key_State_Last == 0 && KEY_TEXT.Key_State_Now == 1)
    {
       KEY_TEXT.Key_Press.Up = 1;
    }
    /*——————按键的高级功能——————*/
    if(Key_Flag == 0)
    {
       if(KEY_TEXT.Key_State_Now == 0)
       {
              Key_Time = 50;//设定长按时间
              Key_Flag = 1;
       }
       KEY_TEXT.Key_Type = None_Key;
    }
    else if(Key_Flag == 1)
    {
       if(KEY_TEXT.Key_State_Now == 1)
       {
              Key_Time = 25;//设定双击检测时间
              Key_Flag = 2;
       }
       else if(Key_Time == 0)
       {
              KEY_TEXT.Key_Type = Long_Key;//一直计时到长按结束
              Key_Time = 20;
              Key_Flag = 4;
       }
    }
    else if(Key_Flag == 2)
    {
       if(KEY_TEXT.Key_State_Now == 0)
       {
              KEY_TEXT.Key_Type = Double_Key;
              Key_Time = 25;//double
              Key_Flag = 3;
       }
       else if(Key_Time == 0)
       {
              KEY_TEXT.Key_Type = Short_Key;//signe = 1
              Key_Flag = 3;
       }
    }
    else if(Key_Flag == 3)
    {
       if(KEY_TEXT.Key_State_Now == 1)
       {
              Key_Time = 20;
              Key_Flag = 0; 
       }
    }
    else if(Key_Flag == 4)
    {
       if(KEY_TEXT.Key_State_Now == 1)
       {
              Key_Flag = 0; 
       }
       else if(Key_Time == 0)
       {
              KEY_TEXT.Key_Type = Repeat_Key;
              Key_Time = 10;
              Key_Flag = 4; 
       }
    }

}

void KeyLogic_2(void)
{
    static uint8_t  Key_Flag = 0;
    static int Key_Time = 0;
    KEY_2.Key_State_Last = KEY_2.Key_State_Now;  
    KEY_2.Key_State_Now = HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);


    if(Key_Time>0)
    {
       Key_Time--;
    }

   /*——————按键的基础功能——————*/
    if(KEY_2.Key_State_Now == 0)
    {
       KEY_2.Key_Press.Hold = 1;
    }
    else
    {
       KEY_2.Key_Press.Hold = 0;
       KEY_2.Key_Press.Down = 0;
       KEY_2.Key_Press.Up = 0;
    }
    if(KEY_2.Key_State_Last == 1 && KEY_2.Key_State_Now == 0)
    {
       KEY_2.Key_Press.Down = 1;
    }
    if(KEY_2.Key_State_Last == 0 && KEY_2.Key_State_Now == 1)
    {
       KEY_2.Key_Press.Up = 1;
    }
    /*——————按键的高级功能——————*/
    if(Key_Flag == 0)
    {
       if(KEY_2.Key_State_Now == 0)
       {
              Key_Time = 50;//设定长按时间
              Key_Flag = 1;
       }
       KEY_2.Key_Type = None_Key;
    }
    else if(Key_Flag == 1)
    {
       if(KEY_2.Key_State_Now == 1)
       {
              Key_Time = 25;//设定双击检测时间
              Key_Flag = 2;
       }
       else if(Key_Time == 0)
       {
              KEY_2.Key_Type = Long_Key;//一直计时到长按结束
              Key_Time = 20;
              Key_Flag = 4;
       }
    }
    else if(Key_Flag == 2)
    {
       if(KEY_2.Key_State_Now == 0)
       {
              KEY_2.Key_Type = Double_Key;
              Key_Time = 25;//double
              Key_Flag = 3;
       }
       else if(Key_Time == 0)
       {
              KEY_2.Key_Type = Short_Key;//signe = 1
              Key_Flag = 3;
       }
    }
    else if(Key_Flag == 3)
    {
       if(KEY_2.Key_State_Now == 1)
       {
              Key_Time = 20;
              Key_Flag = 0; 
       }
    }
    else if(Key_Flag == 4)
    {
       if(KEY_2.Key_State_Now == 1)
       {
              Key_Flag = 0; 
       }
       else if(Key_Time == 0)
       {
              KEY_2.Key_Type = Repeat_Key;
              Key_Time = 10;
              Key_Flag = 4; 
       }
    }

}


